/**
 * 本质上是说在[1, L]之间，初始均为0，三种操作：
 * 1 s e: [s, e]减一
 * 2 s e: [s, e]加一
 * 3 s e: [s, e]加二
 * 注意均在模4的意义下
 * 最后问结果为3的一共有多少个
 * 首先L在5E7，需要离散化
 * 其次成段增加，最后单点查询，因此可以使用树状数组维护差分数组解决
 */
#include <bits/stdc++.h>
using namespace std;

struct FenwickTree{ // 树状数组

using value_type = int;
using vec_type = vector<value_type>;

int n;
vec_type c;

FenwickTree() = default;

static int lowbit(int x){return x & -x;}

void init(int nn){this->c.assign((this->n=nn) + 1, 0);}

void modify(int pos, value_type delta){
    for(int i=pos;i<=this->n;i+=lowbit(i)) this->c[i] += delta;
}

value_type query(int pos)const{
    value_type ans = 0;
    for(int i=pos;i;i-=lowbit(i)) ans = (ans + this->c[i]) % 4;
    return ans;
}

value_type query(int s, int e)const{return this->query(e) - this->query(s - 1);}

}Bt;

int N;
int L, M;
vector<array<int, 3>> Q;
vector<int> W;

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1; 
    // cin >> nofkase;
    cin >> L >> M;
    Q.assign(M, {});
    W.reserve(M * 9);
    for(auto & a : Q) {
        cin >> a[0] >> a[1] >> a[2];
        W.push_back(a[1] - 1);
        W.push_back(a[1]);
        W.push_back(a[1] + 1);
        W.push_back(a[2] - 1);
        W.push_back(a[2]);
        W.push_back(a[2] + 1);
    }
    W.push_back(0);
    W.push_back(L);
    W.push_back(L + 1);
    sort(W.begin(), W.end());
    W.erase(unique(W.begin(), W.end()), W.end());
    N = W.size() - 1;
    Bt.init(N);
    for(const auto & a : Q){
        int s = lower_bound(W.begin(), W.end(), a[1]) - W.begin();
        int e = lower_bound(W.begin(), W.end(), a[2]) - W.begin();
        switch(a[0]){
            case 1: Bt.modify(s, -1); Bt.modify(e + 1, 1); break;
            case 2: Bt.modify(s, 1); Bt.modify(e + 1, -1); break;
            case 3: Bt.modify(s, 2); Bt.modify(e + 1, -2); break;
            default: assert(0);
        }
    }
    int ans = 0;
    for(int i=1;i<N;++i){
        auto tmp = Bt.query(1, i);
        if(tmp < 0) tmp += 4;
        if(3 == tmp){
            ans = ans + W[i] - W[i - 1];
        }
    }    
    cout << ans << endl;
    return 0;
}